{T}

Jenkins 通过 SSH 发布前端项目

概述

本文详解使用 Publish Over SSH 插件将 Jenkins 构建产物发布到远程 Nginx 服务器的完整流程,包括插件安装、SSH Server 配置、密钥认证及构建后操作配置。

学习目标

  1. 掌握 Publish Over SSH 插件的配置方法
  2. 理解 SSH 密钥认证的配置流程
  3. 能够配置自动化的文件传输和远程命令执行

一、发布流程

图表渲染中…

核心步骤

步骤操作
1安装 Publish Over SSH 插件
2配置 SSH Server(系统配置)
3配置 SSH 密钥认证
4添加构建后操作
5配置传输文件和远程命令

二、配置 SSH Server

路径:系统管理 → 系统配置 → Publish over SSH

参数配置

参数说明示例
Name服务器标识prod-server
HostnameIP 或域名192.168.1.100
Username登录用户root
Remote Directory远程基础目录/home
PortSSH 端口22

高级配置

参数说明
KeySSH 私钥内容
Key Path私钥文件路径
Avoid sending unchanged files差异化传输(推荐勾选)

三、SSH 密钥认证

生成密钥对

bash
# 在 Jenkins 容器中
docker exec -it jenkins bash
ssh-keygen -t rsa -b 4096 -C "jenkins@deploy"

# 查看私钥(配置到 Jenkins)
cat ~/.ssh/id_rsa

# 查看公钥(配置到远程服务器)
cat ~/.ssh/id_rsa.pub

远程服务器配置公钥

bash
# 在远程服务器上
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

验证连接

在 Jenkins 系统配置中点击 "Test Configuration",显示 "Success" 即配置成功。


四、构建后操作配置

添加 SSH 发布

code
构建后操作 → Send build artifacts over SSH

配置项

配置说明示例
Source files传输的文件(ant 通配符)dist/**
Remove prefix移除路径前缀dist
Remote directory远程目标目录/frontend/project
Exec command远程执行命令见下方

远程命令示例

bash
# 重启 Nginx
nginx -s reload

# 或执行部署脚本
/home/deploy/restart.sh

文件传输说明

图表渲染中…
  • Source files: dist/** → 匹配 dist 下所有文件
  • Remove prefix: dist → 传输时去掉 dist 前缀
  • Remote directory: 相对于 Remote Directory 的路径

五、完整构建配置

构建步骤(Shell)

bash
# 安装依赖
npm install --registry=https://registry.npmmirror.com

# 构建项目
npm run build

# 验证产物
ls -la dist/

Nginx 配置(远程服务器)

nginx
server {
    listen 80;
    server_name example.com;
    root /home/frontend/project;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /assets {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

常见问题

问题解决方案
SSH 连接失败检查密钥配置、防火墙、端口
文件传输失败确认远程目录存在且有写权限
权限被拒绝检查远程目录权限 chmod 755
传输速度慢勾选差异化传输

延伸阅读